﻿using System.Windows;
using System.Windows.Controls;
using AstekServis.Web.Data;
using System.ServiceModel.DomainServices.Client;
using System.Collections.Generic;
using System.Linq;
using System;

namespace AstekServis.Views
{
    public partial class AracTanitim : ChildWindow
    {
        AsTekDomainContext context = new AsTekDomainContext();
        public bool YeniArac { get; set; }
        public MontajBilgi MontajBilgi { get; set; }
        Kullanici user = Session.Instance.GetValue<Kullanici>("user");
        List<KapamaSebebi> _kapamaSebepleri;

        public AracTanitim()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(AracTanitim_Loaded);
        }

        void AracTanitim_Loaded(object sender, RoutedEventArgs e)
        {
            if (MontajBilgi != null)
            {
                txtGrup.Text = MontajBilgi.GrupAdi;
                txtFirma.Text = MontajBilgi.FirmaAdi;
                txtAdres.Text = MontajBilgi.Adres;
                txtTarih.Text = MontajBilgi.Tarih.ToShortDateString();
                txtFaturaNo.Text = MontajBilgi.BelgeNo;
                txtSistemNumarasi.Text = MontajBilgi.AracKodu;

                UrunListesi();
                MarkaListesi();
            }
            dteMontajTarihi.SelectedDate = DateTime.Now;
        }

        private void KapamaSebepleriListesi()
        {
            EntityQuery<KapamaSebebi> qry = context.GetKapamaSebepleriQuery().OrderBy(x => x.Adi);
            LoadOperation<KapamaSebebi> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<KapamaSebebi> op = ss as LoadOperation<KapamaSebebi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    _kapamaSebepleri = op.Entities.Select(x => new KapamaSebebi { Adi = x.Adi, ID = x.ID }).ToList();
                    LoadMontajBilgisi();
                }
            };
        }
        private void UrunListesi()
        {
            EntityQuery<FaturaDetay> qry = context.GetFaturaDetaylariQuery().Where(x => x.CharID == MontajBilgi.FaturaID).OrderBy(x => x.StokAdi);
            LoadOperation<FaturaDetay> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<FaturaDetay> op = ss as LoadOperation<FaturaDetay>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    grdUrunler.AddColumn("AnaGrup");
                    grdUrunler.AddColumn("Marka");
                    grdUrunler.AddColumn("StokKodu");
                    grdUrunler.AddColumn("StokAdi");
                    grdUrunler.Columns[3].Width = 200;
                    grdUrunler.AddColumn("Miktar");
                    grdUrunler.AddColumn("Serinolar");
                    grdUrunler.Columns[5].Width = 200;
                    grdUrunler.DataSource = op.Entities;
                }
            };
        }
        private void MarkaListesi()
        {
            EntityQuery<AracMarka> qry = context.GetAracMarkalariQuery().OrderBy(x => x.MarkaAdi);
            LoadOperation<AracMarka> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<AracMarka> op = ss as LoadOperation<AracMarka>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    ServisYerleriListesi();
                    OzellikListesi();
                    AracMarka marka = new AracMarka();
                    marka.ID = -1;
                    marka.MarkaAdi = "";
                    cmbMarka.Items.Add(marka);
                    foreach (var item in op.Entities)
                    {
                        cmbMarka.Items.Add(item);
                    }
                    cmbMarka.DisplayMemberPath = "MarkaAdi";
                }
            };
        }
        private void OzellikListesi()
        {
            EntityQuery<OzellikTanimi> qry = context.GetOzellikTanimlariQuery().OrderBy(x => x.OzellikAdi);
            LoadOperation<OzellikTanimi> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<OzellikTanimi> op = ss as LoadOperation<OzellikTanimi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    TeknisyenListesi();
                    grdEkBilgiler.AddColumn("OzellikAdi");
                    grdEkBilgiler.Columns[0].Width = 200;
                    grdEkBilgiler.Columns[0].AllowEditing = DevExpress.Utils.DefaultBoolean.False;
                    grdEkBilgiler.AddColumn("Değer");
                    grdEkBilgiler.Columns[1].AllowEditing = DevExpress.Utils.DefaultBoolean.True;
                    grdEkBilgiler.Columns[1].UnboundType = DevExpress.Data.UnboundColumnType.String;

                    grdEkBilgiler.DataSource = op.Entities;

                    for (int i = 0; i < grdEkBilgiler.RowCount; i++)
                    {
                        grdEkBilgiler.SetCellValue(i, grdEkBilgiler.Columns["Değer"], "");
                    }

                }
            };
        }
        private void TeknisyenListesi()
        {
            EntityQuery<Teknisyen> qry = context.GetTeknisyenlerQuery().OrderBy(x => x.Adi);
            LoadOperation<Teknisyen> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<Teknisyen> op = ss as LoadOperation<Teknisyen>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    LoadFirmware();

                    List<Teknisyen> teknisyenler = op.Entities.Select(x => new Teknisyen { Adi = x.Adi, AmirID = x.AmirID, ID = x.ID }).ToList();
                    cmbMontajSefi.DisplayMemberPath = "Adi";
                    cmbElektrikci.DisplayMemberPath = "Adi";
                    cmbAltyapiTek1.DisplayMemberPath = "Adi";
                    cmbAltyapiTek2.DisplayMemberPath = "Adi";
                    cmbUstyapiTek1.DisplayMemberPath = "Adi";
                    cmbUstyapiTek2.DisplayMemberPath = "Adi";

                    Teknisyen tr = new Teknisyen();
                    tr.ID = -1;
                    tr.AmirID = -1;
                    tr.Adi = " ";
                    cmbMontajSefi.Items.Add(tr);
                    cmbElektrikci.Items.Add(tr);
                    cmbAltyapiTek1.Items.Add(tr);
                    cmbAltyapiTek2.Items.Add(tr);
                    cmbUstyapiTek1.Items.Add(tr);
                    cmbUstyapiTek2.Items.Add(tr);

                    foreach (Teknisyen tk in teknisyenler)
                    {
                        cmbMontajSefi.Items.Add(tk);
                        cmbElektrikci.Items.Add(tk);
                        cmbAltyapiTek1.Items.Add(tk);
                        cmbAltyapiTek2.Items.Add(tk);
                        cmbUstyapiTek1.Items.Add(tk);
                        cmbUstyapiTek2.Items.Add(tk);
                    }


                    if (cmbMontajSefi.Items.Count > 0)
                        cmbMontajSefi.SelectedIndex = 0;

                    if (cmbElektrikci.Items.Count > 0)
                        cmbElektrikci.SelectedIndex = 0;

                    if (cmbAltyapiTek1.Items.Count > 0)
                        cmbAltyapiTek1.SelectedIndex = 0;

                    if (cmbAltyapiTek2.Items.Count > 0)
                        cmbAltyapiTek2.SelectedIndex = 0;

                    if (cmbUstyapiTek1.Items.Count > 0)
                        cmbUstyapiTek1.SelectedIndex = 0;

                    if (cmbUstyapiTek2.Items.Count > 0)
                        cmbUstyapiTek2.SelectedIndex = 0;
                }
            };
        }
        private void LoadFirmware()
        {
            EntityQuery<FirmwareTanim> qry = context.GetFirmwareTanimlariQuery().OrderBy(x => x.Aciklama);
            LoadOperation<FirmwareTanim> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<FirmwareTanim> op = ss as LoadOperation<FirmwareTanim>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    LoadSistem();
                    cmbFirmware.ItemsSource = op.Entities;
                    cmbFirmware.DisplayMemberPath = "Aciklama";
                }
            };
        }
        private void LoadSistem()
        {
            EntityQuery<SistemTanim> qry = context.GetSistemTanimlariQuery().OrderBy(x => x.Aciklama);
            LoadOperation<SistemTanim> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<SistemTanim> op = ss as LoadOperation<SistemTanim>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    LoadArac();
                    cmbSistem.ItemsSource = op.Entities;
                    cmbSistem.DisplayMemberPath = "Aciklama";
                }
            };
        }
        private void LoadArac()
        {
            EntityQuery<Arac> qry = context.GetAraclarQuery().Where(x => x.AracKodu == MontajBilgi.AracKodu);
            LoadOperation<Arac> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<Arac> op = ss as LoadOperation<Arac>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    Arac arc = op.Entities.FirstOrDefault();
                    if (arc != null)
                    {
                        for (int i = 0; i < cmbFirmware.Items.Count; i++)
                        {
                            if (((FirmwareTanim)cmbFirmware.Items[i]).ID == arc.FirmwareID)
                            {
                                cmbFirmware.SelectedIndex = i;
                                break;
                            }
                        }

                        for (int i = 0; i < cmbMarka.Items.Count; i++)
                        {
                            if (((AracMarka)cmbMarka.Items[i]).ID == arc.MarkaID)
                            {
                                cmbMarka.SelectedIndex = i;
                                break;
                            }
                        }

                        for (int i = 0; i < cmbSistem.Items.Count; i++)
                        {
                            if (((SistemTanim)cmbSistem.Items[i]).ID == arc.SistemID)
                            {
                                cmbSistem.SelectedIndex = i;
                                break;
                            }
                        }


                        txtKoltukNo.Text = arc.KoltukSayisi.ToString();
                        dteMontajTarihi.SelectedDate = arc.MontajTarihi;
                        txtMontajYeri.Text = arc.MontajYeri;
                        txtPlaka.Text = arc.Plaka;
                        txtSasiNo.Text = arc.SasiNo;
                        txtSistemNumarasi.Text = arc.AracKodu;
                        txtUretimYili.Value = arc.UretimYili.Year;

                        AracOzellikLoad(arc.ID);
                    }
                }
            };
        }
        private void AracOzellikLoad(int aracID)
        {
            EntityQuery<AracOzellik> qry = context.GetAracOzellikleriQuery().Where(x => x.AracID == aracID);
            LoadOperation<AracOzellik> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<AracOzellik> op = ss as LoadOperation<AracOzellik>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    foreach (AracOzellik item in op.Entities)
                    {
                        for (int i = 0; i < grdEkBilgiler.RowCount; i++)
                        {
                            OzellikTanimi tnm = (OzellikTanimi)grdEkBilgiler.GetDataRow(i);
                            if (tnm != null)
                            {
                                if (tnm.ID == item.OzellikID)
                                {
                                    grdEkBilgiler.SetCellValue(i, grdEkBilgiler.Columns["Değer"], item.Deger);
                                }
                            }
                        }
                    }

                    LoadHubYerleri(aracID);
                }
            };
        }
        private string FindControlByValue(int row, string name)
        {
            string value = "";
            var query = from element in grdHubYerleri.Children
                        where (int)element.GetValue(Grid.RowProperty) == row
                        select element;

            foreach (var q in query)
            {
                if (q.GetType() == typeof(TextBox))
                {
                    TextBox tb = q as TextBox;
                    if (tb.Name == name)
                    {
                        value = tb.Text.Check();
                        break;
                    }
                }
            }
            return value;
        }
        private void FindControlBySetValue(int row, string name, string value)
        {
            var query = from element in grdHubYerleri.Children
                        where (int)element.GetValue(Grid.RowProperty) == row
                        select element;

            foreach (var q in query)
            {
                if (q.GetType() == typeof(TextBox))
                {
                    TextBox tb = q as TextBox;
                    if (tb.Name == name)
                    {
                        tb.Text = value;
                        break;
                    }
                }
            }
        }
        private void LoadHubYerleri(int aracID)
        {
            EntityQuery<AracHubYeri> qry = context.GetAracHubYerleriQuery().Where(x => x.AracID == aracID);
            LoadOperation<AracHubYeri> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<AracHubYeri> op = ss as LoadOperation<AracHubYeri>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    foreach (AracHubYeri item in op.Entities.ToList())
                    {
                        FindControlBySetValue(item.HubKoltukNo, "txtHK" + item.HubKoltukNo.ToString(), item.MonitorKoltukNo1.ToString());
                        FindControlBySetValue(item.HubKoltukNo, "txtHK" + item.HubKoltukNo.ToString() + "1", item.MonitorKoltukNo2.ToString());
                        FindControlBySetValue(item.HubKoltukNo, "txtHK" + item.HubKoltukNo.ToString() + "2", item.MonitorKoltukNo3.ToString());
                        FindControlBySetValue(item.HubKoltukNo, "txtHK" + item.HubKoltukNo.ToString() + "3", item.MonitorKoltukNo4.ToString());
                        FindControlBySetValue(item.HubKoltukNo, "txtHK" + item.HubKoltukNo.ToString() + "4", item.MonitorKoltukNo5.ToString());
                        FindControlBySetValue(item.HubKoltukNo, "txtHK" + item.HubKoltukNo.ToString() + "5", item.MonitorKoltukNo6.ToString());
                        FindControlBySetValue(item.HubKoltukNo, "txtHK" + item.HubKoltukNo.ToString() + "6", item.MonitorKoltukNo7.ToString());
                    }

                    if (MontajBilgi.ID > -1)
                    {
                        KapamaSebepleriListesi();
                    }
                }
            };
        }
        private void LoadMontajBilgisi()
        {
            EntityQuery<AracHareketi> qry = context.GetAracHareketleriQuery().Where(x => x.ID == MontajBilgi.ID);
            LoadOperation<AracHareketi> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<AracHareketi> op = ss as LoadOperation<AracHareketi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    AracHareketi arc = op.Entities.FirstOrDefault();
                    if (arc != null)
                    {
                        txtMusteri.Text = arc.MusteriAdi;
                        txtTelefon.Text = arc.MusteriTelefon;
                        dteMontajTarihi.SelectedDate = arc.Tarih;

                        if (arc.TeknisyenID1 > -1)
                        {
                            for (int i = 0; i < cmbMontajSefi.Items.Count; i++)
                            {
                                if (((Teknisyen)cmbMontajSefi.Items[i]).ID == arc.TeknisyenID1)
                                {
                                    cmbMontajSefi.SelectedIndex = i;
                                    break;
                                }
                            }
                        }

                        if (arc.TeknisyenID2 > -1)
                        {
                            for (int i = 0; i < cmbElektrikci.Items.Count; i++)
                            {
                                if (((Teknisyen)cmbElektrikci.Items[i]).ID == arc.TeknisyenID2)
                                {
                                    cmbElektrikci.SelectedIndex = i;
                                    break;
                                }
                            }
                        }

                        if (arc.TeknisyenID3 > -1)
                        {
                            for (int i = 0; i < cmbAltyapiTek1.Items.Count; i++)
                            {
                                if (((Teknisyen)cmbAltyapiTek1.Items[i]).ID == arc.TeknisyenID3)
                                {
                                    cmbAltyapiTek1.SelectedIndex = i;
                                    break;
                                }
                            }
                        }

                        if (arc.TeknisyenID4 > -1)
                        {
                            for (int i = 0; i < cmbAltyapiTek2.Items.Count; i++)
                            {
                                if (((Teknisyen)cmbAltyapiTek2.Items[i]).ID == arc.TeknisyenID4)
                                {
                                    cmbAltyapiTek2.SelectedIndex = i;
                                    break;
                                }
                            }
                        }

                        if (arc.TeknisyenID5 > -1)
                        {
                            for (int i = 0; i < cmbUstyapiTek1.Items.Count; i++)
                            {
                                if (((Teknisyen)cmbUstyapiTek1.Items[i]).ID == arc.TeknisyenID5)
                                {
                                    cmbUstyapiTek1.SelectedIndex = i;
                                    break;
                                }
                            }
                        }

                        if (arc.TeknisyenID6 > -1)
                        {
                            for (int i = 0; i < cmbUstyapiTek2.Items.Count; i++)
                            {
                                if (((Teknisyen)cmbUstyapiTek2.Items[i]).ID == arc.TeknisyenID6)
                                {
                                    cmbUstyapiTek2.SelectedIndex = i;
                                    break;
                                }
                            }
                        }

                        txtTeslimAlan.Text = arc.TeslimAlan;
                        txtNotlar.Text = arc.Notlar;

                        if (_kapamaSebepleri != null)
                        {
                            if (arc.KapamaNedeniID > -1)
                            {
                                var kpm = _kapamaSebepleri.Where(x => x.ID == arc.KapamaNedeniID).FirstOrDefault();
                                if (kpm != null)
                                    txtKapamaNedeni.Text = kpm.Adi;
                            }
                        }

                        if (arc.ServisMerkezID > -1)
                        {
                            for (int i = 0; i < cmbServis.Items.Count; i++)
                            {
                                if (((ServisMerkezi)cmbServis.Items[i]).ID == arc.ServisMerkezID)
                                {
                                    cmbServis.SelectedIndex = i;
                                    break;
                                }
                            }
                        }
                    }
                }
            };
        }
        private void ServisYerleriListesi()
        {
            EntityQuery<ServisMerkezi> qry = context.GetServisMerkezleriQuery();
            LoadOperation<ServisMerkezi> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<ServisMerkezi> op = ss as LoadOperation<ServisMerkezi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    List<ServisMerkezi> tanimlar = op.Entities.Select(x => new ServisMerkezi { ID = x.ID, Adi = x.Adi }).ToList();
                    cmbServis.DisplayMemberPath = "Adi";
                    foreach (ServisMerkezi item in tanimlar)
                    {
                        cmbServis.Items.Add(item);
                    }
                }
            };
        }

        private void Kaydet()
        {
            try
            {
                SaveArac();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void EkOzellikKaydet()
        {
            EntityQuery<Arac> qry = context.GetAraclarQuery().Where(x => x.AracKodu == MontajBilgi.AracKodu);
            LoadOperation<Arac> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<Arac> op = ss as LoadOperation<Arac>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    Arac arc = op.Entities.FirstOrDefault();
                    if (arc != null)
                    {
                        SaveAracEkBilgi(arc.ID);
                    }
                }
            };
        }
        private void SaveArac()
        {
            if (!string.IsNullOrEmpty(txtMusteri.Text))
            {
                LoadOperation<Arac> operation = context.Load(context.GetAraclarQuery().Where(x => x.AracKodu == MontajBilgi.AracKodu));
                operation.Completed += (ss, oo) =>
                {
                    LoadOperation<Arac> op = ss as LoadOperation<Arac>;
                    if (op.HasError)
                    {
                        System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                        System.Windows.MessageBoxButton.OK);
                        op.MarkErrorAsHandled();
                    }
                    else
                    {
                        Arac arc = op.Entities.FirstOrDefault();
                        if (arc != null)
                        {
                            arc.AltCariKodu = MontajBilgi.AltCariKodu;
                            arc.AnaCariKodu = MontajBilgi.AnaCariKodu;
                            arc.KoltukSayisi = Cevir.Parse<int>(txtKoltukNo.Text);
                            arc.MontajTarihi = dteMontajTarihi.SelectedDate.Value;
                            arc.MontajYeri = txtMontajYeri.Text.Check();
                            arc.Plaka = txtPlaka.Text.Check();
                            arc.SasiNo = txtSasiNo.Text.Check();

                            if (cmbSistem.SelectedIndex > -1)
                                arc.SistemID = ((SistemTanim)cmbSistem.SelectedItem).ID;
                            else
                                arc.SistemID = -1;

                            if (cmbFirmware.SelectedIndex > -1)
                                arc.FirmwareID = ((FirmwareTanim)cmbFirmware.SelectedItem).ID;
                            else
                                arc.FirmwareID = -1;

                            if (cmbMarka.SelectedIndex > -1)
                                arc.MarkaID = ((AracMarka)cmbMarka.SelectedItem).ID;
                            else
                                arc.MarkaID = -1;

                            arc.SistemNo = txtSistemNumarasi.Text.Check();
                            arc.UretimYili = new DateTime(Cevir.Parse<int>(txtUretimYili.Value), 1, 1);

                            context.SubmitChanges(so =>
                            {
                                if (so.HasError)
                                    MessageBox.Show("Hata:\r\n" + so.Error.Message);
                                else
                                {
                                    EkOzellikKaydet();
                                }
                            }, null);
                        }
                        else
                        {
                            Arac newarc = new Arac();
                            newarc.AracKodu = MontajBilgi.AracKodu;
                            newarc.AltCariKodu = MontajBilgi.AltCariKodu;
                            newarc.AnaCariKodu = MontajBilgi.AnaCariKodu;
                            newarc.KoltukSayisi = Cevir.Parse<int>(txtKoltukNo.Text);
                            newarc.MontajTarihi = dteMontajTarihi.SelectedDate.Value;
                            newarc.MontajYeri = txtMontajYeri.Text.Check();
                            newarc.Plaka = txtPlaka.Text.Check();
                            newarc.SasiNo = txtSasiNo.Text.Check();
                            newarc.SistemNo = txtSistemNumarasi.Text.Check();
                            newarc.UretimYili = new DateTime(Cevir.Parse<int>(txtUretimYili.Value), 1, 1);

                            if (cmbSistem.SelectedIndex > -1)
                                newarc.SistemID = ((SistemTanim)cmbSistem.SelectedItem).ID;
                            else
                                newarc.SistemID = -1;

                            if (cmbFirmware.SelectedIndex > -1)
                                newarc.FirmwareID = ((FirmwareTanim)cmbFirmware.SelectedItem).ID;
                            else
                                newarc.FirmwareID = -1;

                            if (cmbMarka.SelectedIndex > -1)
                                newarc.MarkaID = ((AracMarka)cmbMarka.SelectedItem).ID;
                            else
                                newarc.MarkaID = -1;

                            context.Aracs.Add(newarc);
                            context.SubmitChanges(so =>
                            {
                                if (so.HasError)
                                    MessageBox.Show("Hata:\r\n" + so.Error.Message);
                                else
                                {
                                    EkOzellikKaydet();
                                }
                            }, null);
                        }
                    }
                };
            }
        }
        private void SaveAracEkBilgi(int aracID)
        {
            LoadOperation<AracOzellik> operation = context.Load(context.GetAracOzellikleriQuery().Where(x => x.AracID == aracID));
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<AracOzellik> op = ss as LoadOperation<AracOzellik>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    List<AracOzellik> lst = op.Entities.ToList();
                    foreach (var item in lst)
                    {
                        context.AracOzelliks.Remove(item);
                    }
                    context.SubmitChanges(so =>
                    {
                        if (so.HasError)
                            MessageBox.Show("Hata:\r\n" + so.Error.Message);
                        else
                        {
                            AracOzellik oz = null;
                            for (int i = 0; i < grdEkBilgiler.RowCount; i++)
                            {
                                if (!string.IsNullOrEmpty(grdEkBilgiler.GetCellValue(i, grdEkBilgiler.Columns["Değer"]).ToString()))
                                {
                                    OzellikTanimi tnm = (OzellikTanimi)grdEkBilgiler.GetDataRow(i);
                                    if (tnm != null)
                                    {
                                        oz = new AracOzellik();
                                        oz.AracID = aracID;
                                        oz.OzellikID = tnm.ID;
                                        oz.Deger = grdEkBilgiler.GetCellValue(i, grdEkBilgiler.Columns["Değer"]).ToString();

                                        context.AracOzelliks.Add(oz);
                                    }
                                }
                            }

                            context.SubmitChanges(sso =>
                            {
                                if (sso.HasError)
                                    MessageBox.Show("Hata:\r\n" + sso.Error.Message);
                                else
                                {
                                    SaveHubBilgi(aracID);
                                }
                            }, null);
                        }
                    }, null);
                }
            };
        }
        private void SaveHubBilgi(int aracID)
        {
            LoadOperation<AracHubYeri> operation = context.Load(context.GetAracHubYerleriQuery().Where(x => x.AracID == aracID));
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<AracHubYeri> op = ss as LoadOperation<AracHubYeri>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    List<AracHubYeri> lst = op.Entities.ToList();
                    foreach (var item in lst)
                    {
                        context.AracHubYeris.Remove(item);
                    }
                    context.SubmitChanges(so =>
                    {
                        if (so.HasError)
                            MessageBox.Show("Hata:\r\n" + so.Error.Message);
                        else
                        {
                            AracHubYeri oz = null;
                            for (int r = 1; r < 11; r++)
                            {
                                string val = FindControlByValue(r, "txtHK" + r.ToString());
                                oz = new AracHubYeri();
                                oz.AracID = aracID;
                                oz.HubKoltukNo = (byte)r;
                                oz.MonitorKoltukNo1 = Cevir.Parse<byte>(val);

                                for (int c = 1; c < 7; c++)
                                {
                                    val = FindControlByValue(r, "txtHK" + r.ToString() + c.ToString());
                                    if (!string.IsNullOrEmpty(val))
                                    {
                                        switch (c)
                                        {
                                            case 1:
                                                oz.MonitorKoltukNo2 = Cevir.Parse<byte>(val);
                                                break;
                                            case 2:
                                                oz.MonitorKoltukNo3 = Cevir.Parse<byte>(val);
                                                break;
                                            case 3:
                                                oz.MonitorKoltukNo4 = Cevir.Parse<byte>(val);
                                                break;
                                            case 4:
                                                oz.MonitorKoltukNo5 = Cevir.Parse<byte>(val);
                                                break;
                                            case 5:
                                                oz.MonitorKoltukNo6 = Cevir.Parse<byte>(val);
                                                break;
                                            case 6:
                                                oz.MonitorKoltukNo7 = Cevir.Parse<byte>(val);
                                                break;
                                        }
                                    }
                                }
                                context.AracHubYeris.Add(oz);
                            }

                            context.SubmitChanges(sso =>
                            {
                                if (sso.HasError)
                                    MessageBox.Show("Hata:\r\n" + sso.Error.Message);
                                else
                                {
                                    MontajKayit(aracID);
                                }
                            }, null);
                        }
                    }, null);
                }
            };
        }
        private void MontajKayit(int aracID)
        {
            LoadOperation<AracHareketi> operation = context.Load(context.GetAracHareketleriQuery().Where(x => x.ID == MontajBilgi.ID));
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<AracHareketi> op = ss as LoadOperation<AracHareketi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    AracHareketi arc = op.Entities.FirstOrDefault();
                    if (arc != null)
                    {
                        arc.MusteriAdi = txtMusteri.Text.Check();
                        arc.MusteriTelefon = txtTelefon.Text.Check();
                        arc.Tarih = dteMontajTarihi.SelectedDate.Value;
                        if (cmbMontajSefi.SelectedIndex > -1)
                        {
                            arc.TeknisyenID1 = ((Teknisyen)cmbMontajSefi.SelectedItem).ID;
                        }

                        if (cmbElektrikci.SelectedIndex > -1)
                        {
                            arc.TeknisyenID2 = ((Teknisyen)cmbElektrikci.SelectedItem).ID;
                        }

                        if (cmbAltyapiTek1.SelectedIndex > -1)
                        {
                            arc.TeknisyenID3 = ((Teknisyen)cmbAltyapiTek1.SelectedItem).ID;
                        }

                        if (cmbAltyapiTek2.SelectedIndex > -1)
                        {
                            arc.TeknisyenID4 = ((Teknisyen)cmbAltyapiTek2.SelectedItem).ID;
                        }

                        if (cmbUstyapiTek1.SelectedIndex > -1)
                        {
                            arc.TeknisyenID5 = ((Teknisyen)cmbUstyapiTek1.SelectedItem).ID;
                        }

                        if (cmbUstyapiTek2.SelectedIndex > -1)
                        {
                            arc.TeknisyenID6 = ((Teknisyen)cmbUstyapiTek2.SelectedItem).ID;
                        }

                        if (cmbServis.SelectedIndex > -1)
                        {
                            arc.ServisMerkezID = ((ServisMerkezi)cmbServis.SelectedItem).ID;
                        }

                        arc.TeslimAlan = txtTeslimAlan.Text.Check();
                        arc.Notlar = txtNotlar.Text.Check();
                        arc.HizmetYeri = "0";
                        arc.MontajSefiTarihi = DateTime.Now;
                        arc.DbNo = MontajBilgi.DbNo;

                        context.SubmitChanges(so =>
                        {
                            if (so.HasError)
                                MessageBox.Show("Hata:\r\n" + so.Error.Message);
                        }, null);
                    }
                    else
                    {
                        AracHareketi hr = new AracHareketi();
                        hr.OlusturanKullanici = user.ID;
                        hr.OlusturulmaTarihi = DateTime.Now;
                        hr.KapanmaTarihi = new DateTime(1900, 1, 1);
                        hr.KapatanKullanici = -1;
                        hr.Durum = 0;
                        hr.EvrakTip = 0;
                        hr.FaturaID = MontajBilgi.FaturaID;
                        hr.AracID = aracID;
                        hr.Tarih = dteMontajTarihi.SelectedDate.Value;
                        hr.MusteriAdi = txtMusteri.Text.Check();
                        hr.MusteriTelefon = txtTelefon.Text.Check();
                        hr.AracGelisTarihi = dteMontajTarihi.SelectedDate.Value;
                        hr.AracHareketTarihi = dteMontajTarihi.SelectedDate.Value;
                        hr.ServiseGidilecekTarih = dteMontajTarihi.SelectedDate.Value;
                        hr.HizmetYeri = "0";
                        hr.Notlar = txtNotlar.Text.Check();
                        hr.ServisMerkezID = -1;
                        hr.ServisBelgeNo = "A";
                        hr.DbNo = MontajBilgi.DbNo;

                        if (cmbServis.SelectedIndex > -1)
                            hr.ServisMerkezID = ((ServisMerkezi)cmbServis.SelectedItem).ID;
                        else
                            hr.ServisMerkezID = -1;

                        if (cmbMontajSefi.SelectedIndex > -1)
                            hr.TeknisyenID1 = ((Teknisyen)cmbMontajSefi.SelectedItem).ID;
                        else
                            hr.TeknisyenID1 = -1;

                        if (cmbElektrikci.SelectedIndex > -1)
                            hr.TeknisyenID2 = ((Teknisyen)cmbElektrikci.SelectedItem).ID;
                        else
                            hr.TeknisyenID2 = -1;

                        if (cmbAltyapiTek1.SelectedIndex > -1)
                            hr.TeknisyenID3 = ((Teknisyen)cmbAltyapiTek1.SelectedItem).ID;
                        else
                            hr.TeknisyenID3 = -1;

                        if (cmbAltyapiTek2.SelectedIndex > -1)
                            hr.TeknisyenID4 = ((Teknisyen)cmbAltyapiTek2.SelectedItem).ID;
                        else
                            hr.TeknisyenID4 = -1;

                        if (cmbUstyapiTek1.SelectedIndex > -1)
                            hr.TeknisyenID5 = ((Teknisyen)cmbUstyapiTek1.SelectedItem).ID;
                        else
                            hr.TeknisyenID5 = -1;

                        if (cmbUstyapiTek2.SelectedIndex > -1)
                            hr.TeknisyenID6 = ((Teknisyen)cmbUstyapiTek2.SelectedItem).ID;
                        else
                            hr.TeknisyenID6 = -1;

                        hr.TeknisyenID7 = -1;
                        hr.TeknisyenID8 = -1;
                        hr.TeknisyenID9 = -1;
                        hr.TeknisyenID10 = -1;

                        hr.TeslimAlan = txtTeslimAlan.Text.Check();
                        hr.MontajSefiTarihi = DateTime.Now;
                        context.AracHareketis.Add(hr);

                        context.SubmitChanges(so =>
                        {
                            if (so.HasError)
                                MessageBox.Show("Hata:\r\n" + so.Error.Message);
                        }, null);
                    }
                }
            };
        }

        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            Kaydet();
            this.DialogResult = true;
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }
    }
}

